package com.force.common.mybatisplus.interceptors;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.HexValue;
import net.sf.jsqlparser.statement.select.PlainSelect;

/**
 * 拦截器处理器
 */
@Slf4j
public class MyDataPermissionHandler {

    /**
     * 获取数据权限 SQL 片段
     *
     * @param plainSelect  查询对象
     * @param whereSegment 查询条件片段
     * @return JSqlParser 条件表达式
     */
    @SneakyThrows(Exception.class)
    public Expression getSqlSegment(PlainSelect plainSelect, String whereSegment) {
        // 待执行 SQL Where 条件表达式
        Expression where = plainSelect.getWhere();
        if (where == null) {
            where = new HexValue(" 1 = 1 ");
        }
//        //获取mapper名称
//        String className = whereSegment.substring(0, whereSegment.lastIndexOf("."));
//        //获取方法名
//        String methodName = whereSegment.substring(whereSegment.lastIndexOf(".") + 1);
//        Table fromItem = (Table) plainSelect.getFromItem();
//        // 有别名用别名，无别名用表名，防止字段冲突报错
//        Alias fromItemAlias = fromItem.getAlias();
//        String mainTableName = fromItemAlias == null ? fromItem.getName() : fromItemAlias.getName();
//        //获取当前mapper 的方法
//        Method[] methods = Class.forName(className).getMethods();
//        //遍历判断mapper 的所有方法，判断方法上是否有 UserDataPermission
//        for (Method m : methods) {
//            if (Objects.equals(m.getName(), methodName)) {
//                UserDataPermission annotation = m.getAnnotation(UserDataPermission.class);
//                if (annotation == null) {
//                    return where;
//                }
//                String type = annotation.id();
//                //小程序或应用程序的集合，in的范围
//                List<String> dataIds = sysUserDataRelationService.getUserPermission(mpcTokenUtil.getUserAccountByToken(), EDataPermissionType.getCode(type));
//                if (CollectionUtils.isEmpty(dataIds)) {
//                    return null;
//                }
//                log.info("开始进行权限过滤,where: {},mappedStatementId: {}", where, whereSegment);
//                // 把集合转变为JSQLParser需要的元素列表
//                ItemsList ids = new ExpressionList(dataIds.stream().map(StringValue::new).collect(Collectors.toList()));
//                //in表达式的写法
//                InExpression inExpressiondept = null;
//                String key = appManageConfig.getList().get(type);
//                inExpressiondept = new InExpression(new Column(mainTableName + "." + key), ids);
//                return new AndExpression(where, inExpressiondept);
//
//            }
//        }
//        //说明无权查看，
//        where = new HexValue(" 1 = 2 ");
        return where;
    }
 
}